<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>24应用实例和生命周期</title>
</head>
<body>
<div id="app">
    <div id="abc"><b>{{ message }}</b></div>
</div>
<script src="../vue.global.3.0.5.js"></script>
<script>
    //1、创建一个Vue应用实例，本身是最顶层的根组件
    const app = Vue.createApp({
        data() {
            return { 
                message: "父组件message"
            }
        },
        //定义一个局部组件，本组件是根组件的子组件(推荐)
        components: {
            
        },
        //【生命周期钩子1】当实例被创建后执行（在模板渲染前执行，一般用于初始化属性值）
        created() {
            this.message="created()中修改message的属性值";
            //无法获取DOM
            //console.log(document.getElementById("abc").innerHTML);
        },
        //【生命周期钩子2】当实例被挂载后执行（在模板渲染完成后执行，此时可以操作DOM）
        mounted() {
            //可以获取DOM
            console.log(document.getElementById("abc").innerHTML);
        },
        //【生命周期钩子3】当虚拟DOM被修改后会执行（当数据被修改但是页面没用到该数据时updated()不会执行）
        updated() {
            console.log("虚拟DOM被修改了~");
        }
    });
    //2、定义一个全局组件
    app.component('button-counter', {
        //数据
        data() {
            return {
                counter: 100
            }
        },
        //模板
        template: `
            计算器: {{counter}}
            <button v-on:click="counter++">counter++</button><br>
        `
    });
    //3、挂载，返回值是代理对象并不是应用实例本身
    const vm = app.mount("#app");
</script>
</body>
</html>